home *** CD-ROM | disk | FTP | other *** search
/ Aminet 20 / Aminet 20 (1997)(GTI - Schatztruhe)[!][Aug 1997].iso / Aminet / comm / www / HTP.lha / HTP / source / gif.c next >
C/C++ Source or Header  |  1997-06-21  |  2KB  |  87 lines

  1. /*
  2. //
  3. // gif.c
  4. //
  5. // GIF (Graphic Interchange Format) support functions
  6. //
  7. // Copyright (c) 1995-96 Jim Nelson.  Permission to distribute
  8. // granted by the author.  No warranties are made on the fitness of this
  9. // source code.
  10. // Amiga version - 1997 - Geert Bevin
  11. //
  12. */
  13.  
  14. #include "htp.h"
  15.  
  16. BOOL GifFormatFound(FILE *file)
  17. {
  18.     BYTE header[8];
  19.  
  20.     /* move to BOF */
  21.     if(fseek(file, 0, SEEK_SET) != 0)
  22.     {
  23.         DEBUG_PRINT(("unable to seek to start of GIF file"));
  24.         return FALSE;
  25.     }
  26.  
  27.     /* read first six bytes, looking for GIF header + version info */
  28.     if(fread(header, 1, 6, file) != 6)
  29.     {
  30.         DEBUG_PRINT(("could not read GIF image file header"));
  31.         return FALSE;
  32.     }
  33.  
  34.     /* is this a GIF file? */
  35.     if((memcmp(header, "GIF87a", 6) == 0) || (memcmp(header, "GIF89a", 6) == 0))
  36.     {
  37.         return TRUE;
  38.     }
  39.  
  40.     /* not a GIF file */
  41.     return FALSE;
  42. }
  43.  
  44. BOOL GifReadDimensions(FILE *file, WORD *height, WORD *width)
  45. {
  46.     BYTE hi;
  47.     BYTE lo;
  48.  
  49.     /* move to the image size position in the file header */
  50.     if(fseek(file, 6, SEEK_SET) != 0)
  51.     {
  52.         DEBUG_PRINT(("unable to seek to start of GIF file"));
  53.         return FALSE;
  54.     }
  55.  
  56.     /* read the width, byte by byte */
  57.     /* this gets around machine endian problems while retaining the */
  58.     /* fact that GIF uses little-endian notation */
  59.     if(fread(&lo, 1, 1, file) != 1)
  60.     {
  61.         return FALSE;
  62.     }
  63.  
  64.     if(fread(&hi, 1, 1, file) != 1)
  65.     {
  66.         return FALSE;
  67.     }
  68.  
  69.     *width = MAKE_WORD(hi, lo);
  70.  
  71.     /* read the height, byte by byte */
  72.     if(fread(&lo, 1, 1, file) != 1)
  73.     {
  74.         return FALSE;
  75.     }
  76.  
  77.     if(fread(&hi, 1, 1, file) != 1)
  78.     {
  79.         return FALSE;
  80.     }
  81.  
  82.     *height = MAKE_WORD(hi, lo);
  83.  
  84.     return TRUE;
  85. }
  86.  
  87.